'''
 案例9.26: 使用easySpider和matplotlib绘图库实现腾讯疫情数据可视化
'''
#1.导入easySpider类和json模块、matplotlib
import easySpider
import json
from matplotlib import pyplot as plt

#2.实例化easySpider，根据url爬取JSON数据,返回字符串格式的数据
url = 'https://api.inews.qq.com/newsqa/v1/automation/modules/list?modules=FAutoGlobalStatis,FAutoContinentStatis,FAutoGlobalDailyList,FAutoCountryConfirmAdd'
txData = easySpider.Spider(url=url)
resultStr = txData.requests_getHtmlSource()
#3.使用json的loads方法将字符串格式转换为python字典
resutDict=json.loads(resultStr)

#4.打印输出数据
for item in resutDict['data']['FAutoContinentStatis']:
    print(item)

#5.取出其中全球各大洲每周统计数据存入列表
# 先定义7个空列表
dates,Asia,NorthAmerica,Oceania,Europe,Africa,SouthAmerica=[],[],[],[],[],[],[]
# 将对应的数据存入列表中
for item in resutDict['data']['FAutoContinentStatis']:
    dates.append(item['date'])
    Asia.append(item['statis']['亚洲'])
    NorthAmerica.append(item['statis']['北美洲'])
    Oceania.append(item['statis']['大洋洲'])
    Europe.append(item['statis']['欧洲'])
#前两周非洲和南美洲数据为空，这里补为0
    if item['date'] > '02/23':
        Africa.append(item['statis']['非洲'])
        SouthAmerica.append(item['statis']['南美洲'])
    else:
        Africa.append(0)
        SouthAmerica.append(0)

#6. 绘制各大洲疫情数据增长折线图
plt.title("全球各大洲疫情数据变化图")
plt.xlabel('时间')
plt.ylabel('疫情人数')
plt.xticks(rotation=45)
plt.gca().yaxis.get_major_formatter().set_scientific(False)  #y轴不使用科学计数法
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.plot(dates,Asia,label="亚洲")
plt.plot(dates,NorthAmerica,label="北美洲")
plt.plot(dates,Oceania,label="大洋洲")
plt.plot(dates,Europe,label="欧洲")
plt.plot(dates,Africa,label="非洲")
plt.plot(dates,SouthAmerica,label="南美洲")
plt.legend()
plt.show()

#7.绘制4个月份全球各大洲疫情数据分布饼图
labels=['亚洲','北美洲','欧洲','南美洲','非洲','大洋洲']
for i in range(1,3):
    ax=plt.subplot(1,2,i)
    ax.set_title("倒数第{}周全球疫情数据分布对比".format(i))
    numbers = [Asia[-i],NorthAmerica[-i],Europe[-i],SouthAmerica[-i],Africa[-i],Oceania[-i]]
plt.pie(numbers,labels=labels,autopct='%.1f%%')
plt.show()
